package com.hz.blogService.controller;

import com.hz.apiService.model.request.ApiResponse;
import com.hz.blogService.domain.Blog;
import com.hz.blogService.service.BlogService;
import com.hz.blogService.utils.Commons;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * @author LiiiYiAn
 * @version 1.0
 * @createDate 2023-09-24 21:18
 * @projectName SchoolServicePlatformFinal
 * @className BlogServiceController
 * @description 控制器 - 博客管理
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/blog")
public class BlogServiceController {

    private final BlogService blogService;

    private final Commons commons;


    /**
     * @author LiiiYiAn
     * @createDate 2023/9/25 17:08
     * @description 发布博客
     * @param blog 博客信息
     * @return java.lang.String 发布博客信息JSON格式
     **/
    @PostMapping("/add-blog")
    public String publishBlog(Blog blog) {
        int result = blogService.addBlog(blog);  // result为新增后该记录的主键自增ID

        return result > 0 ? ApiResponse.ok(blogService.findBlogById(result)) : ApiResponse.intError();
    }


    /**
     * @return java.lang.String 所有博客信息
     * @author LiiiYiAn
     * @createDate 2023/9/24 22:21
     * @description 查询所有博客列表，并将其存储到Redis缓存
     * @return  java.lang.String 所有博客信息JSON格式
     **/
    @GetMapping("/all")
    public String selectBlogList() {
        String result = blogService.findBlogAll();

        return result != null ? ApiResponse.ok(result) : ApiResponse.intError();
    }


    /**
     * @param id 博客ID
     * @return java.lang.String 指定ID博客信息JSON格式
     * @author LiiiYiAn
     * @createDate 2023/9/24 22:23
     * @description 查询指定ID博客信息，并将其存储到Redis缓存
     **/
    @GetMapping("/view-blog")
    public String selectBlogById(@RequestParam("id") Integer id) {
        // 博客查询，查询成功返回查询博客信息JSON格式
        String result = blogService.findBlogById(id);

        return result != null ? ApiResponse.ok(result) : ApiResponse.intError();
    }


    /**
     * @param id 博客ID
     * @return java.lang.String 删除结果JSON格式
     * @author LiiiYiAn
     * @createDate 2023/9/24 22:46
     * @description 删除指定ID博客信息
     **/
    @GetMapping("/delete-blog")
    public String deleteBlogById(@RequestParam("id") Integer id) {
        int result = blogService.deleteBlogById(id);

        return result > 0 ? ApiResponse.ok(result) : ApiResponse.intError();
    }


    /**
     * @author LiiiYiAn
     * @createDate 2023/9/24 22:49
     * @description 修改指定ID博客信息
     * @param blog 修改后博客信息，并更新其存储到Redis的缓存
     * @return java.lang.String 修改结果JSON格式
     **/
    @PostMapping("/edit-blog")
    public String editBlogById(Blog blog) {
        int result = blogService.updateBlogById(blog);

        return result > 0 ? ApiResponse.ok(result) : ApiResponse.intError();
    }


    /**
     * @author LiiiYiAn
     * @createDate 2023/9/24 23:03
     * @description 根据标题或内容搜索指定博客
     * @param keywords 标题或内容字符串
     * @return java.lang.String 指定博客信息JSON格式
     **/
    @PostMapping("/search-blogs")
    public String searchBlogsByKeywords(@RequestParam("keywords") String keywords) {
        String result = blogService.findBlogByKeyWords(keywords);

        return result != null ? ApiResponse.ok(result) : ApiResponse.intError();
    }

    /**
     * @author LiiiYiAn
     * @createDate 2023/10/6 14:19
     * @description 获取博客缩略图
     * @param id 博客ID
     * @return java.lang.String 博客缩略图服务端路径
     **/
    @GetMapping("/get-thumbnails")
    public String getThumbnails(Integer id) {
        return commons.show_thumb(id);
    }

    /**
     * @author LiiiYiAn
     * @createDate 2023/10/8 21:37
     * @description 根据博客id查询对应作者信息
     * @param id 博客id
     * @return java.lang.String 作者信息JSON格式
     **/
    @GetMapping("/get-blog-author-by-id")
    public String getBlogAuthorNameById(Integer id) {
        String result = blogService.findBlogAuthorById(id);

        return result != null ? ApiResponse.ok(result) : ApiResponse.intError();
    }
}
